package com.example.aigc_education.domain.dto;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;

@Document(collection = "theme_study_time")
@Data
@NoArgsConstructor
public class ThemeStudyTimeDTO {
    /**
     * 序号
     */
    @Id
    private String themeStudyTimeId;

    /**
     * 主题id
     */
    private Long themeId;

    /**
     * 总共时间(单位：分)
     */
    private Integer totalTime;

    /**
     * 今天：年-月-日
     */
    private LocalDate today;

    /**
     * 过期时间
     */
    private LocalDate expireAt;
    //private LocalDateTime expireAt;

    /**
     * 开始时间
     */
    private Instant startTime;

    /**
     * 结束时间
     */
    private Instant endTime;

    /**
     * 每次更新时间，就会自动计算时间差
     * @param endTime   结束时间
     */
    public void setEndTime(Instant endTime){
        this.endTime = endTime;
        this.totalTime += Math.toIntExact(ChronoUnit.MINUTES.between(
                startTime.atZone(ZoneId.systemDefault()),
                endTime.atZone(ZoneId.systemDefault())
        ));
    }

    /**
     * 自定义构造函数
     * @param themeId   主题id
     * @param today     今天
     * @param startTime 开始时间
     */
    public ThemeStudyTimeDTO(Long themeId, LocalDate today, Instant startTime) {
        this.themeId = themeId;
        this.startTime = startTime;
        this.endTime = startTime;
        this.today = today;

        // 总共时间
        this.totalTime = 0;

        // 七天有效期
        this.expireAt = today.plusDays(7);

    }

}
